package com.xmjs.baselibrary.base.fragment.lazy;

import android.os.Bundle;

import androidx.annotation.Nullable;

import com.trello.rxlifecycle3.components.support.RxFragment;

/**
 * 懒加载Fragment（仅针对使用FragmentPagerAdapter装载Fragment时有效）
 */
public class LazyFragment extends RxFragment {
    //标记View是否加载完成
    private boolean isViewCreated;

    //标记Fragment是否可见
    private boolean isUIVisible;

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        isViewCreated = true;
        onVisible();
    }

    /**
     * Fragment可见状态
     * （仅针对使用FragmentPagerAdapter装置Fragment时有效）
     *
     * @param isVisibleToUser
     */
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        isUIVisible = isVisibleToUser;
        onVisible();
    }

    /**
     * 在Fragment可见并且view已经加装完成时执行懒加载方法
     */
    private void onVisible() {
        //这里进行双重标记判断,是因为setUserVisibleHint会多次回调,并且会在onCreateView
        //执行前回调,必须确保onCreateView加载完毕且页面可见才去请求数据
        if (isViewCreated && isUIVisible) {
            //执行懒加载方法
            lazyLoad();
            //数据加载完毕,恢复标记,防止重复加载
            isViewCreated = false;
            isUIVisible = false;
        }
    }

    /**
     * 当前Fragment是否可见
     *
     * @return
     */
    public boolean isUIVisible() {
        return isUIVisible;
    }

    /**
     * 懒加载（如果需要懒加载功能，请重写lazyLoad方法去请求数据或初始化组件）
     */
    public void lazyLoad() {

    }
}
